package routes

import (
	"fmt"
	"github.com/gorilla/mux"
	"hello/app/http/controllers/admin"
	"hello/app/http/middlewares"
	"hello/inits/myhelpers"
	"net/http"
)

//import "hello/bootstrap"

// WebRoutes 所有web路由
func WebRoutes(r *mux.Router) {
	//这个路径究竟是什么？基于项目根目录还是当前根目录?
	//经过实验，必须得是 "./" 才能代表项目根目录
	//helper := new(myhelpers.Helper)
	//g.LoadHTMLGlob("resources/**/**/*") //仅用于了登录，其他页面要做分离和继承，
	//// 故用golang自带的模板引擎加以封装
	// 静态资源,页面写public能够直接识别到模板
	staticServer := http.FileServer(http.Dir("."))
	r.PathPrefix("/public/css/").Handler(staticServer)
	r.PathPrefix("/public/js/").Handler(staticServer)
	r.PathPrefix("/public/layui/").Handler(staticServer)
	fmt.Println("WebRoutes开始执行")
	r.Use(middlewares.RequestRouteLog)
	baseUrl := "/" + myhelpers.MHELPER.GetAdminBaseUrl()
	//indexIndexController := index.NewIndexIndex()
	authC := admin.NewAuth()
	adminIndexC := admin.NewAdminIndex()
	{ //前台路由
		//首页
		//g.GET("/", indexIndexController.GetList)
		////文章栏目
		//g.GET("/categorys", indexIndexController.Categorys)
		////文章列表
		//g.GET("/list/:id", indexIndexController.ArticleList)
		////文章详情
		//g.GET("/post/:id", indexIndexController.Article)
	}
	{ //后台路由
		//后台前缀
		//AdminGroup := g.Group("/" + helper.GetAdminBaseUrl())
		AdminGroup := r.PathPrefix(baseUrl).Subrouter()
		//登录页面
		AdminGroup.HandleFunc("/login", authC.LoginForm).
			Methods("GET").Name("adminlogin")
		//获取验证码
		AdminGroup.HandleFunc("/captcha", authC.GetCaptcha).
			Methods("GET").Name("captcha")
		//登录
		AdminGroup.HandleFunc("/login", authC.Login).
			Methods("POST").Name("postlogin")
		//这里经过实验，是按照顺序执行的，以上admin路由没有被包裹中间件
		//引出问题，如果有多层中间件，只能按照顺序来的话，会有限制，后期需要调整。也可以重新
		//强制登录中间件
		AuthGroup := r.PathPrefix(baseUrl).Subrouter()
		AuthGroup.Use(middlewares.AdminAuth)
		{
			//后台登录页面layout
			AuthGroup.HandleFunc("/index", authC.AdminIndex).
				Methods("GET").Name("admin.layout")
			//后台登录页面index
			AuthGroup.HandleFunc("/main", adminIndexC.Index).
				Methods("GET").Name("admin.index")
			//当前登录用户修改信息页面
			AuthGroup.HandleFunc("/edit", authC.AdminEdit).
				Methods("GET").Name("admin.edit")
			//修改信息提交更新
			AuthGroup.HandleFunc("/update", authC.AdminUpdate).
				Methods("POST").Name("admin.update")
			AuthGroup.HandleFunc("/logout", authC.Logout).
				Methods("GET").Name("admin.logout")
			//栏目操作
			{
				catPath := "/category"
				categoryC := admin.NewCategory()
				//栏目列表页面
				AuthGroup.HandleFunc(catPath+"/index", categoryC.Index).
					Methods("GET").Name("category.index")
				//栏目列表接口
				AuthGroup.HandleFunc(catPath+"/list", categoryC.GetList).
					Methods("GET").Name("category.get_list")
			}
		}
		//g1 := AdminGroup.Group("/g1")
		//g1.GET("/t1")
		//AdminG := g.Group("/madmin/t")
		//AdminG.GET("/test")
	}
	fmt.Println("WebRoutes执行完毕")
}
